#ifndef __DVC_SERIALPLOT_H__
#define __DVC_SERIALPLOT_H__

/*=============================Include========================================*/
#include "alg_pid.h"
#include "drv_uart.h"
/*==============================ExportedMacros================================*/
#define RX_MAX_LENGTH (256)
#define PLOT_STOP	(0xAA)
/*=============================ExportedTypes==================================*/
typedef enum single_cmd : uint8_t {
	SINGLE_KP = 0x3A,
	SINGLE_KI = 0x3B,
	SINGLE_KD = 0x3C,
	SINGLE_KF = 0x3D,
	SINGLE_TARGET = 0x3E,
} single_cmd_e;

typedef enum double_cmd : uint8_t {
	DOUBLE_KP = 0x4A,
	DOUBLE_KI = 0x4B,
	DOUBLE_KD = 0x4C,
	DOUBLE_KF = 0x4D,
	DOUBLE_TARGET = 0x4E,
} double_cmd_e;

typedef enum plot_mode {
	SINGLE_MODE,
	DOUBLE_MODE,
}plot_mode_e;

class SerialPlot {
   public:
	PID *single_loop;
	PID *double_loop;

	void init(UART_HandleTypeDef *_huart, PID *_single_loop);
	void init(UART_HandleTypeDef *_huart, PID *_single_loop, PID *_double_loop);

	void print(const char *_format, ...);
	void print_dma(const char *_format, ...);
	void vofa_just_float(const char *_format, ...);
	void vofa_just_float_dma(const char *_format, ...);
	void vofa_show_pid_loop();
	void UART_RxCallback(uint8_t *_rx_data);

   private:
	uart_manager_t *uart_manager;
	plot_mode_e mode=SINGLE_MODE;

	single_cmd_e single_cmd;
	double_cmd_e double_cmd;

	void judge_stop();
	void pid_adjust();
	void pid_clear();
	void data_pross();
};
/*=============================ExportedDefinitions============================*/

/*=============================ExportedFunctionDeclarations===================*/

#endif

/*========================COPYRIGHT(C) CCUT-DAMOCLES==========================*/
